package com.container;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;


import android.content.Context;
import android.os.AsyncTask;
import android.os.Handler;
import android.util.Log;
import android.widget.Toast;

public class Registro {
	
	private String url = "http://sighton.es/softbooks/phpServer.php";
	private Context ctx;
	private String jsonResult;
	public static int esperarMilisegundos = 4000;
	private Handler handler;
	private boolean resultado;
	private boolean resultado2;
	
	public Registro(Context context){
		ctx = context;
		handler = new Handler();
	}
	
	
	// Async Task to access the web
			private class JsonReadTask extends AsyncTask<String, Void, String> {
				
				@Override
				protected String doInBackground(String... params) {
					HttpClient httpclient = new DefaultHttpClient();
					HttpPost httppost = new HttpPost(params[0]);
					String query = params[1];
					try {
						
						// Add your data
					    List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
					    nameValuePairs.add(new BasicNameValuePair("query", query));
					    
					    httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
					    
						HttpResponse response = httpclient.execute(httppost);	
						jsonResult = inputStreamToString(response.getEntity().getContent()).toString();
					}

					catch (ClientProtocolException e) {
						e.printStackTrace();
					} catch (IOException e) {
						e.printStackTrace();
					}
					catch (Exception ex){
						Log.d("Registro", "Exception on doInBackground()");
					}
					return null;
				}
				
				
				private StringBuilder inputStreamToString(InputStream is) {
					String rLine = "";
					StringBuilder answer = new StringBuilder();
					BufferedReader rd = new BufferedReader(new InputStreamReader(is));

					try {
						while ((rLine = rd.readLine()) != null) {
							answer.append(rLine);
						}
					}

					catch (IOException e) {
						// e.printStackTrace();
						Toast.makeText(ctx,
								"Error..." + e.toString(), Toast.LENGTH_LONG).show();
					}
					return answer;
				}
								
				
			}
			
			
			
			//Metodo para registrar un usuario
			public void registrar(String nombre, String contrasena, String nacimiento, String direccion, String email){
				String queryReg="insert into usuario(nombre,contrasena,nacimiento,direccion,email)"+
						" values('"+nombre+"','"+contrasena+"','"+nacimiento+"','"+direccion+
						"','"+email+"')"+";";
				
				JsonReadTask task = new JsonReadTask();
				// passes values for the urls string array
				task.execute(new String[] { url, queryReg });
			}
			
			
			
			//Metodo para comprobar si un usuario con nombre 'nombre' existe
			//PROBLEMA: Devuelve resultado antes de que el AsyncTask haya 
			//          actualizado su valor
			public boolean existeNombre(final String nombre){				
				String queryCons="select nombre from usuario where nombre='"+nombre+"';";				
				
				JsonReadTask task = new JsonReadTask();
				// passes values for the urls string array
				task.execute(new String[] { url, queryCons });
				
					//Espera a recibir la respuesta del servidor y que se actualice
					//la variable 'jsonResult'
			        handler.postDelayed(new Runnable() {
			            public void run() {
			                // acciones que se ejecutan tras los milisegundos
			                resultado= jsonResult.contains("\"nombre\":\""+nombre+"\"");							               
			            }
			        }, esperarMilisegundos);
						
				return resultado;				
			}
			
			
			//Metodo para comprobar si un usuario con email 'email' existe
			//PROBLEMA: Devuelve resultado antes de que el AsyncTask haya 
			//          actualizado su valor
			public boolean existeEmail(final String email){
				String queryCons="select email from usuario where email='"+email+"';";
				
				JsonReadTask task = new JsonReadTask();
				// passes values for the urls string array
				task.execute(new String[] { url, queryCons });
				
				//Espera a recibir la respuesta del servidor y que se actualice
				//la variable 'jsonResult'
				handler.postDelayed(new Runnable() {
		            public void run() {
		                // acciones que se ejecutan tras los milisegundos
		            	resultado= jsonResult.contains("\"email\":\""+email+"\"");		            	
		            }
		        }, esperarMilisegundos);
				
				return resultado;					
			}	
			
			
			//Metodo para comprobar si un usuario con contrasena 'contrasena' existe
			//PROBLEMA: Devuelve resultado antes de que el AsyncTask haya 
			//          actualizado su valor
			public boolean existePass(final String contrasena){
				String queryCons="select contrasena from usuario where contrasena='"+contrasena+"';";
				
				JsonReadTask task = new JsonReadTask();
				// passes values for the urls string array
				task.execute(new String[] { url, queryCons });
				
				//Espera a recibir la respuesta del servidor y que se actualice
				//la variable 'jsonResult'
				handler.postDelayed(new Runnable() {
		            public void run() {
		                // acciones que se ejecutan tras los milisegundos
		            	resultado= jsonResult.contains("\"contrasena\":\""+contrasena+"\"");		          
		            }
		        }, esperarMilisegundos);
				
				return resultado;					
			}
			
			
			//Metodo para comprobar si existe un usuario con 'nombre' y 'contrasena'
			//PROBLEMA: Devuelve resultado && resultado2 antes de que el AsyncTask haya 
			//          actualizado su valor
			public boolean existeUser(final String nombre, final String contrasena){
				String queryCons="select nombre,contrasena from usuario where nombre='"+nombre+"';";
				
				JsonReadTask task = new JsonReadTask();
				// passes values for the urls string array
				task.execute(new String[] { url, queryCons });
				
				//Espera a recibir la respuesta del servidor y que se actualice
				//la variable 'jsonResult'
				handler.postDelayed(new Runnable() {
		            public void run() {
		                // acciones que se ejecutan tras los milisegundos
		            	resultado= jsonResult.contains("\"nombre\":\""+nombre+"\"");
		            	resultado2= jsonResult.contains("\"contrasena\":\""+contrasena+"\"");		            			            			            		            
		            }
		        }, esperarMilisegundos);
				
				return resultado && resultado2;						
			}
			
			
}
